package com.example.lettcode._202411._20241118;

import java.util.Arrays;

/*
414. 第三大的数
给你一个非空数组，返回此数组中 第三大的数 。如果不存在，则返回数组中最大的数。

示例 1：
输入：[3, 2, 1]
输出：1
解释：第三大的数是 1 。

示例 2：
输入：[1, 2]
输出：2
解释：第三大的数不存在, 所以返回最大的数 2 。

示例 3：
输入：[2, 2, 3, 1]
输出：1
解释：注意，要求返回第三大的数，是指在所有不同数字中排第三大的数。
此例中存在两个值为 2 的数，它们都排第二。在所有不同数字中排第三大的数为 1 。


提示：
1 <= nums.length <= 104
-231 <= nums[i] <= 231 - 1
 */
public class _01_di_san_da_de_shu {

    public static void main(String[] args) {
        int[] nums = {1, 2};
        System.out.println(thirdMax2(nums));
    }

    public static int thirdMax(int[] nums) {
        Arrays.sort(nums);

        int count = 1;
        for (int i = nums.length - 1; i >= 1; i--) {
            if (nums[i] != nums[i-1]) {
                count++;
            }
            if (count == 3) {
                return nums[i-1];
            }
        }
        return nums[nums.length-1];
    }

    /*
        维护三个变量，a,b,c来赋值为：最大，第二大，第三大
     */
    public static int thirdMax2(int[] nums) {
        long a = Long.MIN_VALUE, b = Long.MIN_VALUE, c = Long.MIN_VALUE;
        for (int i = 0; i < nums.length; i++) {
            long num = nums[i];
            if (num > a) {
                c = b;
                b = a;
                a = num;
            }else if (num < a && num > b) {
                c = b;
                b = num;
            }else if (num < b && num > c) {
                c = num;
            }
        }
        return c == Long.MIN_VALUE ? (int) a : (int) c;
    }
}
